#ifndef KERNEL_AGV_I_AGV_STATUS_PROVIDER_H
#define KERNEL_AGV_I_AGV_STATUS_PROVIDER_H

#include "kernel/interfaces/Result.h"
#include "kernel/dtos/agv_dto.h"
#include <functional>

namespace kernel {
namespace agv {

/**
 * @brief AGV 状态提供者接口
 * @details 定义获取 AGV 状态的契约，支持两种模式：
 *          - 被动接收模式（MKLM）：等待 AGV 主动上传数据
 *          - 主动轮询模式（SEER）：定时主动请求 AGV 状态
 */
class IAgvStatusProvider {
public:
    virtual ~IAgvStatusProvider() = default;

    /**
     * @brief 状态更新回调函数类型
     * @param status AGV 状态 DTO
     */
    using StatusUpdateCallback = std::function<void(const kernel::dtos::AgvStatusDTO& status)>;

    /**
     * @brief 启动状态监听/轮询
     * @return Result<void> 启动结果
     */
    virtual Result<void> start() = 0;

    /**
     * @brief 停止状态监听/轮询
     */
    virtual void stop() = 0;

    /**
     * @brief 检查是否正在运行
     * @return bool 是否正在运行
     */
    virtual bool isRunning() const = 0;

    /**
     * @brief 设置状态更新回调
     * @param callback 回调函数
     */
    virtual void setStatusUpdateCallback(StatusUpdateCallback callback) = 0;

    /**
     * @brief 获取 AGV 编号
     * @return int AGV 编号
     */
    virtual int getAgvNumber() const = 0;
};

} // namespace agv
} // namespace kernel

#endif // KERNEL_AGV_I_AGV_STATUS_PROVIDER_H
